library(dplyr)
library(ggplot2)
library(lubridate)
library(naniar)
library(tidyr)
library(skimr)
library(stringr)
library(plotly)
library(xtable)
blue_theme <- function() {
theme(
# add border
panel.border = element_rect(colour = "blue", fill = NA, linetype = 2),
# color background
panel.background = element_rect(fill = "aliceblue"),
# modify grid
panel.grid.major.x = element_line(colour = "steelblue", linetype = 3, linewidth = 0.5),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_line(colour = "steelblue", linetype = 3, linewidth = 0.5),
panel.grid.minor.y = element_blank(),
# modify text, axis and colour
axis.text = element_text(colour = "steelblue", face = "italic"),
axis.title = element_text(colour = "steelblue"),
axis.ticks = element_line(colour = "steelblue"),
# text elements
plot.title = element_text(size = 16, face = 'bold', hjust = 0, vjust = 2, color="steelblue"),
plot.subtitle = element_text(size = 12),
plot.caption = element_text(size = 9, hjust = 1),
# legend at the bottom
legend.position = "bottom"
)
}
# Chargement du jeu de données PhD_v3
PhD_v3 <- read.csv("PhD_v3.csv", header=TRUE, fileEncoding="UTF-8")
glimpse(PhD_v3)
## Rows: 448,047
## Columns: 23
## $ X <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…
## $ Auteur <chr> "Saeed Al marri", "Andrea Ram…
## $ Identifiant.auteur <chr> "", "174423705", "", "", "", …
## $ Titre <chr> "Le credit documentaire et l'…
## $ Directeur.de.these <chr> "Philippe Delebecque", "Jean-…
## $ Directeur.de.these..nom.prenom. <chr> "Delebecque Philippe", "Grand…
## $ Identifiant.directeur <chr> "29561248", "715,441,511", "5…
## $ Etablissement.de.soutenance <chr> "Paris 1", "Chasseneuil-du-Po…
## $ Identifiant.etablissement <chr> "27361802", "28024400", "", "…
## $ Discipline <chr> "Driot prive", "Mecanique des…
## $ Statut <chr> "enCours", "enCours", "souten…
## $ Date.de.premiere.inscription.en.doctorat <chr> "30-09-11", "01-10-12", "", "…
## $ Date.de.soutenance <chr> "", "", "01-01-93", "", "", "…
## $ Year <dbl> NA, NA, 1993, NA, NA, 2008, 2…
## $ Langue.de.la.these <chr> "na", "na", "fr", "na", "na",…
## $ Identifiant.de.la.these <chr> "s69480", "s98826", "1993NAN1…
## $ Accessible.en.ligne <chr> "non", "non", "non", "non", "…
## $ Publication.dans.theses.fr <chr> "26-01-12", "22-11-13", "24-0…
## $ Mise.a.jour.dans.theses.fr <chr> "26-01-12", "22-11-13", "17-1…
## $ Discipline_prÃ.di <chr> "Droit et Science Politique",…
## $ Genre <chr> "male", "female", "male", "ma…
## $ etablissement_rec <chr> "Université Paris 1 - Panthéo…
## $ Langue_rec <chr> NA, NA, "Français", NA, NA, N…
skim(PhD_v3)
Data summary
| Name |
PhD_v3 |
| Number of rows |
448047 |
| Number of columns |
23 |
| _______________________ |
|
| Column type frequency: |
|
| character |
21 |
| numeric |
2 |
| ________________________ |
|
| Group variables |
None |
Variable type: character
| Auteur |
0 |
1.00 |
1 |
102 |
0 |
430273 |
3 |
| Identifiant.auteur |
0 |
1.00 |
0 |
58 |
130347 |
313772 |
0 |
| Titre |
0 |
1.00 |
0 |
17963 |
7 |
446817 |
4 |
| Directeur.de.these |
0 |
1.00 |
0 |
123 |
13 |
159020 |
2 |
| Directeur.de.these..nom.prenom. |
0 |
1.00 |
0 |
123 |
13 |
159022 |
2 |
| Identifiant.directeur |
0 |
1.00 |
1 |
11 |
0 |
98906 |
0 |
| Etablissement.de.soutenance |
0 |
1.00 |
0 |
127 |
1 |
568 |
0 |
| Identifiant.etablissement |
0 |
1.00 |
0 |
9 |
17082 |
573 |
0 |
| Discipline |
0 |
1.00 |
1 |
1474 |
0 |
24262 |
0 |
| Statut |
0 |
1.00 |
7 |
8 |
0 |
2 |
0 |
| Date.de.premiere.inscription.en.doctorat |
0 |
1.00 |
0 |
8 |
383716 |
4010 |
0 |
| Date.de.soutenance |
0 |
1.00 |
0 |
8 |
57086 |
3992 |
0 |
| Langue.de.la.these |
0 |
1.00 |
2 |
8 |
0 |
206 |
0 |
| Identifiant.de.la.these |
0 |
1.00 |
2 |
24 |
0 |
447567 |
0 |
| Accessible.en.ligne |
0 |
1.00 |
3 |
3 |
0 |
2 |
0 |
| Publication.dans.theses.fr |
0 |
1.00 |
8 |
8 |
0 |
2765 |
0 |
| Mise.a.jour.dans.theses.fr |
0 |
1.00 |
0 |
8 |
177 |
2634 |
0 |
| Discipline_prÃ.di |
0 |
1.00 |
3 |
29 |
0 |
15 |
0 |
| Genre |
0 |
1.00 |
4 |
13 |
0 |
6 |
0 |
| etablissement_rec |
0 |
1.00 |
0 |
150 |
3074 |
111 |
0 |
| Langue_rec |
64120 |
0.86 |
5 |
8 |
0 |
4 |
0 |
Variable type: numeric
| X |
0 |
1.00 |
224023.00 |
129340.17 |
0 |
112011.5 |
224023 |
336034.5 |
448046 |
▇▇▇▇▇ |
| Year |
57086 |
0.87 |
2003.25 |
9.85 |
1971 |
1994.0 |
2004 |
2012.0 |
2020 |
▁▃▇▇▇ |
# Correction nom de variable (erreur de conversion lors du chargement du fichier .csv)
PhD_v3b <- PhD_v3 %>%
rename("Discipline_predi" = "Discipline_prÃ.di")
# Correction des erreurs de conversion des accents dans le reste du df
PhD_v3b <- PhD_v3b %>%
mutate(Discipline_predi= str_replace_all(Discipline_predi, "é", "e"))
# Suppression de la première colonne inutile
PhD_v3b <- PhD_v3b[, -1]
# Vérification
glimpse(PhD_v3b)
## Rows: 448,047
## Columns: 22
## $ Auteur <chr> "Saeed Al marri", "Andrea Ram…
## $ Identifiant.auteur <chr> "", "174423705", "", "", "", …
## $ Titre <chr> "Le credit documentaire et l'…
## $ Directeur.de.these <chr> "Philippe Delebecque", "Jean-…
## $ Directeur.de.these..nom.prenom. <chr> "Delebecque Philippe", "Grand…
## $ Identifiant.directeur <chr> "29561248", "715,441,511", "5…
## $ Etablissement.de.soutenance <chr> "Paris 1", "Chasseneuil-du-Po…
## $ Identifiant.etablissement <chr> "27361802", "28024400", "", "…
## $ Discipline <chr> "Driot prive", "Mecanique des…
## $ Statut <chr> "enCours", "enCours", "souten…
## $ Date.de.premiere.inscription.en.doctorat <chr> "30-09-11", "01-10-12", "", "…
## $ Date.de.soutenance <chr> "", "", "01-01-93", "", "", "…
## $ Year <dbl> NA, NA, 1993, NA, NA, 2008, 2…
## $ Langue.de.la.these <chr> "na", "na", "fr", "na", "na",…
## $ Identifiant.de.la.these <chr> "s69480", "s98826", "1993NAN1…
## $ Accessible.en.ligne <chr> "non", "non", "non", "non", "…
## $ Publication.dans.theses.fr <chr> "26-01-12", "22-11-13", "24-0…
## $ Mise.a.jour.dans.theses.fr <chr> "26-01-12", "22-11-13", "17-1…
## $ Discipline_predi <chr> "Droit et Science Politique",…
## $ Genre <chr> "male", "female", "male", "ma…
## $ etablissement_rec <chr> "Université Paris 1 - Panthéo…
## $ Langue_rec <chr> NA, NA, "Français", NA, NA, N…
levels(as.factor(PhD_v3b$Discipline_predi))
## [1] "Biologie" "Droit et Science Politique"
## [3] "Economie Gestion" "Informatique"
## [5] "Langues et Litteratures" "Materiaux, Milieux et Chimie"
## [7] "Mathematiques" "Mathematiques et Informatique"
## [9] "Medecine" "Poubelle"
## [11] "Psychologie" "Science de l'ingenieur"
## [13] "Science de la Terre" "Sciences de l'education"
## [15] "SHS"
# calcul du nombre de doublon dans le df (ligne/observations 100% identiques)
sum(duplicated(PhD_v3b))
## [1] 412
# Affichage des lignes/observations concernées
duplicated_rows <- PhD_v3b[duplicated(PhD_v3b), ]
head(duplicated_rows)
# Retrait des doublons
PhD_v3b <- PhD_v3b %>%
distinct()
# Verification
duplicated_rows <- PhD_v3b[duplicated(PhD_v3b), ]
head(duplicated_rows)
# Correction des types de variable : modification en date
PhD_v3b$Date.de.premiere.inscription.en.doctorat <- as.Date(PhD_v3b$Date.de.premiere.inscription.en.doctorat, format="%Y-%m-%d")
PhD_v3b$Date.de.soutenance <- as.Date(PhD_v3b$Date.de.soutenance, format="%Y-%m-%d")
# Correction des types de variable : modification en variable de type catégoriel
PhD_v3b <- PhD_v3b %>%
mutate_at(vars(Discipline, Discipline_predi, Langue_rec, Genre), as.factor)
## Complétion du dataset : tranformation des valeurs vides ou empty ("") des variables de type "char" par NA
PhD_v3b <- PhD_v3b %>%
mutate_if(is.character, ~ str_trim(.)) %>% # Supprime les espaces avant et après la chaîne
mutate_if(is.character, ~ na_if(., "")) # Remplace les chaînes vides par NA
## Correction des problèmes de typographie sur les NA (certaines étant inscrites en minuscule "na")
PhD_v3b <- PhD_v3b %>% mutate_if(is.character, ~na_if(., "na"))
# Remplacer le point par un espace dans les noms des colonnes
names(PhD_v3b) <- gsub("\\.", " ", names(PhD_v3b))
# Renomer certaines colonnes pour une meilleure lisibilité des graphiques
PhD_v3b <- PhD_v3b %>%
rename(
"Publication dans theses.fr" = "Publication dans theses fr",
"Mise a jour dans theses.fr" = "Mise a jour dans theses fr",
"Directeur de these (nom_prenom)" = "Directeur de these nom prenom "
)
# Vérification des opérations
glimpse(PhD_v3b)
## Rows: 447,635
## Columns: 22
## $ Auteur <chr> "Saeed Al marri", "Andrea R…
## $ `Identifiant auteur` <chr> NA, "174423705", NA, NA, NA…
## $ Titre <chr> "Le credit documentaire et …
## $ `Directeur de these` <chr> "Philippe Delebecque", "Jea…
## $ `Directeur de these (nom_prenom)` <chr> "Delebecque Philippe", "Gra…
## $ `Identifiant directeur` <chr> "29561248", "715,441,511", …
## $ `Etablissement de soutenance` <chr> "Paris 1", "Chasseneuil-du-…
## $ `Identifiant etablissement` <chr> "27361802", "28024400", NA,…
## $ Discipline <fct> "Driot prive", "Mecanique d…
## $ Statut <chr> "enCours", "enCours", "sout…
## $ `Date de premiere inscription en doctorat` <date> 0030-09-11, 0001-10-12, NA…
## $ `Date de soutenance` <date> NA, NA, NA, NA, NA, 0024-1…
## $ Year <dbl> NA, NA, 1993, NA, NA, 2008,…
## $ `Langue de la these` <chr> NA, NA, "fr", NA, NA, NA, N…
## $ `Identifiant de la these` <chr> "s69480", "s98826", "1993NA…
## $ `Accessible en ligne` <chr> "non", "non", "non", "non",…
## $ `Publication dans theses.fr` <chr> "26-01-12", "22-11-13", "24…
## $ `Mise a jour dans theses.fr` <chr> "26-01-12", "22-11-13", "17…
## $ Discipline_predi <fct> "Droit et Science Politique…
## $ Genre <fct> male, female, male, male, m…
## $ etablissement_rec <chr> "Université Paris 1 - Panth…
## $ Langue_rec <fct> NA, NA, Français, NA, NA, N…
# décharge de la mémoire
rm(PhD_v3)
rm(duplicated_rows)
# Export de la base de données propre
write.csv(PhD_v3b, "PhD_v3_clean.csv")
## Variable
## Auteur Auteur
## Identifiant auteur Identifiant auteur
## Titre Titre
## Directeur de these Directeur de these
## Directeur de these (nom_prenom) Directeur de these (nom_prenom)
## Identifiant directeur Identifiant directeur
## Etablissement de soutenance Etablissement de soutenance
## Identifiant etablissement Identifiant etablissement
## Discipline Discipline
## Statut Statut
## Date de premiere inscription en doctorat Date de premiere inscription en doctorat
## Date de soutenance Date de soutenance
## Year Year
## Langue de la these Langue de la these
## Identifiant de la these Identifiant de la these
## Accessible en ligne Accessible en ligne
## Publication dans theses.fr Publication dans theses.fr
## Mise a jour dans theses.fr Mise a jour dans theses.fr
## Discipline_predi Discipline_predi
## Genre Genre
## etablissement_rec etablissement_rec
## Langue_rec Langue_rec
## Nbr_NA Type Nbr_Levels
## Auteur 3 character NA
## Identifiant auteur 129983 character NA
## Titre 11 character NA
## Directeur de these 15 character NA
## Directeur de these (nom_prenom) 15 character NA
## Identifiant directeur 49168 character NA
## Etablissement de soutenance 1 character NA
## Identifiant etablissement 17082 character NA
## Discipline 0 factor 24262
## Statut 0 character NA
## Date de premiere inscription en doctorat 383991 Date NA
## Date de soutenance 221165 Date NA
## Year 56738 numeric NA
## Langue de la these 63760 character NA
## Identifiant de la these 0 character NA
## Accessible en ligne 0 character NA
## Publication dans theses.fr 0 character NA
## Mise a jour dans theses.fr 177 character NA
## Discipline_predi 0 factor 15
## Genre 0 factor 6
## etablissement_rec 3723 character NA
## Langue_rec 63760 factor 4
## % latex table generated in R 4.3.1 by xtable 1.8-4 package
## % Sat Aug 19 01:43:05 2023
## \begin{table}[ht]
## \centering
## \begin{tabular}{lrlr}
## \hline
## Variable & Nbr\_NA & Type & Nbr\_Levels \\
## \hline
## Auteur & 3 & character & \\
## Identifiant auteur & 129983 & character & \\
## Titre & 11 & character & \\
## Directeur de these & 15 & character & \\
## Directeur de these (nom\_prenom) & 15 & character & \\
## Identifiant directeur & 49168 & character & \\
## Etablissement de soutenance & 1 & character & \\
## Identifiant etablissement & 17082 & character & \\
## Discipline & 0 & factor & 24262 \\
## Statut & 0 & character & \\
## Date de premiere inscription en doctorat & 383991 & Date & \\
## Date de soutenance & 221165 & Date & \\
## Year & 56738 & numeric & \\
## Langue de la these & 63760 & character & \\
## Identifiant de la these & 0 & character & \\
## Accessible en ligne & 0 & character & \\
## Publication dans theses.fr & 0 & character & \\
## Mise a jour dans theses.fr & 177 & character & \\
## Discipline\_predi & 0 & factor & 15 \\
## Genre & 0 & factor & 6 \\
## etablissement\_rec & 3723 & character & \\
## Langue\_rec & 63760 & factor & 4 \\
## \hline
## \end{tabular}
## \end{table}
Exercice 1
# création du df de travail pour l'exercice
df_disc <- PhD_v3b %>%
filter(Year >= "1985" & Year <= "2018")
# Area plot basic
# Compte le nombre de thèses dans chaque Discipline_predi pour chaque année
df_disc.an <- df_disc %>%
group_by(Year, Discipline_predi) %>%
count()
colnames(df_disc.an) <- c ("Year", "Discipline_predi", "Disc_predi.an")
# compte le nombre total de thèses par années
df_an <- df_disc %>%
group_by(Year) %>%
count()
colnames(df_an) <- c ("Year", "Disc_tot.an")
# Construction de la df intermediaire pour le calcul des proportions
df_disc.an2 <- full_join(df_disc.an, df_an, by = "Year")
# Calcul des proportions annuelle par Discipline_predi
df_disc.an2 <- df_disc.an2 %>%
mutate(df_disc.an2.sum.perc = round((Disc_predi.an / Disc_tot.an)*100, 2))
# Créer le graphique basic
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_area(position = "stack") +
labs(x = "Date", y = "Nombre de thèses", fill = "Discipline",
title = "Evolution du nombre de thèses par disciplines",
subtitle = "Période 1985-2018") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
blue_theme() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

# création du stacked barplot
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines",
title = "Evolution du nombre de thèses par disciplines",
subtitle = "Période 1985-2018") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
labs(fill="Disciplines") +
blue_theme()

Exercice 1 : area chart avec ordre des disciplines modifiés
# Catégories
categories <- c("Biologie", "Droit et Science Politique", "Economie Gestion", "Informatique",
"Langues et Litteratures", "Materiaux, Milieux et Chimie", "Mathematiques",
"Mathematiques et Informatique", "Medecine", "Poubelle", "Psychologie",
"Science de l'ingenieur", "Science de la Terre", "Sciences de l'education", "SHS")
# Organiser les catégories
new_order <- c("Medecine", "Biologie", setdiff(categories, c("Medecine", "Biologie")))
#
df_disc.an2$Discipline_predi <- factor(df_disc.an2$Discipline_predi, levels = new_order)
df_disc.an2$Discipline_predi[df_disc.an2$Discipline_predi == "Poubelle"] <- NA
df_disc.an2 <- df_disc.an2 %>%
drop_na(Discipline_predi)
# Créer le graphique basic
p <- ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_area(position = "stack", linewidth = 0.8, na.rm = TRUE) +
labs(x = "Date", y = "Nombre de thèses", fill = "Discipline",
title = "Evolution du nombre de thèses par disciplines",
subtitle = "Période 1985-2018") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
blue_theme()
p

# Sauvegarder le graphique au format PNG
ggsave(filename = "area_chart.png", plot = p)
Exercice 1bis : supplément personnel pour rapport (tableau + code
latex)
# Filtrer le dataframe pour les années 1985 et 2018
filtered_df <- df_disc.an2[df_disc.an2$Year %in% c(1985, 2002, 2018), ]
# Afficher le dataframe filtré
print(filtered_df)
## # A tibble: 42 × 5
## # Groups: Year, Discipline_predi [42]
## Year Discipline_predi Disc_predi.an Disc_tot.an df_disc.an2.sum.perc
## <dbl> <fct> <int> <int> <dbl>
## 1 1985 Biologie 695 3007 23.1
## 2 1985 Droit et Science Politi… 168 3007 5.59
## 3 1985 Economie Gestion 220 3007 7.32
## 4 1985 Informatique 45 3007 1.5
## 5 1985 Langues et Litteratures 268 3007 8.91
## 6 1985 Materiaux, Milieux et C… 331 3007 11.0
## 7 1985 Mathematiques 120 3007 3.99
## 8 1985 Mathematiques et Inform… 2 3007 0.07
## 9 1985 Medecine 434 3007 14.4
## 10 1985 Psychologie 94 3007 3.13
## # ℹ 32 more rows
# Pour l'année 1985
top5_1985 <- filtered_df %>%
filter(Year == 1985) %>%
arrange(desc(df_disc.an2.sum.perc)) %>%
head(5)
# Pour l'année 2002
top5_2002 <- filtered_df %>%
filter(Year == 2002) %>%
arrange(desc(df_disc.an2.sum.perc)) %>%
head(5)
# Pour l'année 2018
top5_2018 <- filtered_df %>%
filter(Year == 2018) %>%
arrange(desc(df_disc.an2.sum.perc)) %>%
head(5)
# Afficher les résultats
print(top5_1985)
## # A tibble: 5 × 5
## # Groups: Year, Discipline_predi [5]
## Year Discipline_predi Disc_predi.an Disc_tot.an df_disc.an2.sum.perc
## <dbl> <fct> <int> <int> <dbl>
## 1 1985 Biologie 695 3007 23.1
## 2 1985 Medecine 434 3007 14.4
## 3 1985 SHS 380 3007 12.6
## 4 1985 Materiaux, Milieux et Ch… 331 3007 11.0
## 5 1985 Langues et Litteratures 268 3007 8.91
print(top5_2018)
## # A tibble: 5 × 5
## # Groups: Year, Discipline_predi [5]
## Year Discipline_predi Disc_predi.an Disc_tot.an df_disc.an2.sum.perc
## <dbl> <fct> <int> <int> <dbl>
## 1 2018 Biologie 3245 12805 25.3
## 2 2018 Materiaux, Milieux et Ch… 2469 12805 19.3
## 3 2018 SHS 1525 12805 11.9
## 4 2018 Science de l'ingenieur 1396 12805 10.9
## 5 2018 Informatique 777 12805 6.07
# Regrouper les dataframes par lignes en utilisant rbind
tableau2 <- rbind(top5_1985, top5_2002)
tableau2 <- rbind(tableau2, top5_2018)
# Réorganiser les colonnes si nécessaire
colnames(tableau2) <- c("Year", "Discipline_predi", "Thèses par discipline", "Total thèses soutenues", "% thèses par disc.")
tableau2 <- tableau2[, c(1:3)]
# Afficher le dataframe résultant
print(tableau2)
## # A tibble: 15 × 3
## # Groups: Year, Discipline_predi [15]
## Year Discipline_predi `Thèses par discipline`
## <dbl> <fct> <int>
## 1 1985 Biologie 695
## 2 1985 Medecine 434
## 3 1985 SHS 380
## 4 1985 Materiaux, Milieux et Chimie 331
## 5 1985 Langues et Litteratures 268
## 6 2002 Biologie 2394
## 7 2002 Materiaux, Milieux et Chimie 1779
## 8 2002 SHS 1177
## 9 2002 Science de l'ingenieur 837
## 10 2002 Droit et Science Politique 715
## 11 2018 Biologie 3245
## 12 2018 Materiaux, Milieux et Chimie 2469
## 13 2018 SHS 1525
## 14 2018 Science de l'ingenieur 1396
## 15 2018 Informatique 777
Exercice 2
p2 <- ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1) +
labs(x = "Années", y = "Thèses (%)") +
ggtitle("Distribution des langues de rédaction entre 1985 et 2018") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
labs(fill="Langues") +
blue_theme()
p2

# Sauvegarde du graphique
ggsave(filename = "hist_fill.png", plot = p2)
ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1, alpha = 0.65) +
labs(x = "Années", y = "Disciplines (%)") +
ggtitle("Distribution des langues de rédaction entre 1985 et 2018") +
labs(fill="Langues") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
blue_theme()

ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1, alpha = 0.4) +
labs(x = "Années", y = "Disciplines (%)") +
ggtitle("Distribution des langues de rédaction entre 1985 et 2018") +
labs(fill="Langues") +
theme(plot.margin = margin(0.75, 1, 0, 0, "cm")) +
blue_theme()

Exercice 3
ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0))) +
blue_theme()

ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0))) +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.text.x = element_text(margin = margin(t = 50, r = 0, b = 0 , l = 0))) +
blue_theme()

ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0)),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
blue_theme()

Exercice 4
# charger les polices
library(extrafont)
loadfonts(device = "win")
# même graphique avec des polices différentes
ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0)),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
text = element_text(family = "Garamond"))

# même graphique avec des tailles de polices différentes pour l'axe X
ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0), size = 20),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1, size = 14),
text = element_text(family = "Garamond"))

# même graphique avec des tailles de polices différentes pour les deux axes
ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0), size = 20),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1, size = 14),
axis.title.y = element_text(size = 20),
axis.text.y = element_text(size = 14),
text = element_text(family = "Garamond"))

# même graphique avec des tailles de polices différentes pour les deux axes et le titre
ggplot(df_disc , aes(x = Year, fill = Genre)) +
geom_histogram(position="dodge", color="#e9ecef", binwidth = 5) +
labs(x = "Années", y = "Nb. de thèses") +
ggtitle("Distribution des thèses par genre entre 1985 et 2018") +
labs(fill="Genres") +
theme(plot.margin = margin(0.5, 1, 0.5, 0, "cm")) +
theme(axis.title.x = element_text(margin = margin(t = 8, r = 0, b = 0 , l = 0), size = 24),
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1, size = 14),
axis.title.y = element_text(size = 20),
axis.text.y = element_text(size = 14),
plot.title = element_text(size = 28),
text = element_text(family = "Garamond"))

ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1) +
labs(x = "Années", y = "Disciplines (%)") +
ggtitle("Distribution des langues de rédaction") +
labs(fill="Langues") +
theme(plot.margin = margin(1, 1, 1, 1, "cm")) +
blue_theme()

ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1, alpha = 0.75) +
labs(x = "Années", y = "Disciplines (%)") +
ggtitle("Distribution des langues de rédaction") +
labs(fill="Langues") +
theme(plot.margin = margin(2, 3, 2, 2, "cm")) +
blue_theme()

Exercice 5
# Passage en échelle log10 pour les ordonnées
ggplot(df_disc , aes(x = Year, fill = Langue_rec)) +
geom_histogram(position="fill", color="#e9ecef", binwidth = 1) +
scale_y_log10() +
labs(x = "Années", y = "Disciplines (log)") +
ggtitle("Distribution des langues de rédaction") +
labs(fill="Langues") +
theme(plot.margin = margin(1, 1, 1, 1, "cm")) +
blue_theme()

Exercice 6
# reprise du stacked barplot précédent : légende en haut
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
theme(legend.position = "top") +
blue_theme()

# reprise du stacked barplot précédent : légende à gauche
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
theme(legend.position = "left") +
blue_theme()

# reprise du stacked barplot précédent : légende avec coordonnées
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
theme(legend.position = c(0.95,0.5)) +
blue_theme()

Exercice 7
# reprise du stacked barplot précédent : modification de la palette de couleur
## Chargement de la palette
library(viridis)
## Le chargement a nécessité le package : viridisLite
# Modification du plot : viridis de base
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
blue_theme() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE) # Appliquer la palette viridis à des données discrètes/catégorielles

# Modification du plot : viridis inferno
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
blue_theme() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE, option="inferno") # Appliquer la palette viridis (inferno) à des données discrètes/catégorielles

# Modification du plot : viridis plasma
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
blue_theme() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE, option="plasma") # Appliquer la palette viridis (inferno) à des données discrètes/catégorielles

Exercice 8
# modification de l'ordre des disciplines
df_disc.an2$Discipline_predi_F <- factor(df_disc.an2$Discipline_predi)
myLevels <- levels(df_disc.an2$Discipline_predi_F)
disc_inv <- factor(df_disc.an2$Discipline_predi_F, levels = rev(myLevels)) # inverser l'ordre des niveaux/catégories
# Plot : ordre des discipline inversé
ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = disc_inv)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
blue_theme() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE) # Appliquer la palette viridis à des données discrètes/catégorielles

Exercice 9
df_disc.an2$Date <- as.Date(as.character(df_disc.an2$Year), format="%Y") # passer en format date
# Construire le graphique statique
p <- ggplot(df_disc.an2, aes(x = Date, y = Disc_predi.an, fill = disc_inv)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme(plot.margin = margin(0.5, 2, 0.5, 0, "cm")) +
blue_theme() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE) # Appliquer la palette viridis à des données discrètes/catégorielles
# Création d'un graphique avec rangesliders
p_plotly <- ggplotly(p, dynamicTicks = TRUE) %>% # Transformer le graphique en graphique plotly
layout(
title = "Distribution des thèses par disciplines entre 1985 et 2018\n",
xaxis = list(
rangeslider = list(
type = "date",
bgcolor = "lightblue", # Couleur de fond
bordercolor = "blue", # Couleur de bordure
borderwidth = 2, # Épaisseur de la bordure
thickness = 0.1, # Épaisseur du slider
yaxis = list(title = "", fixedrange = TRUE)
)
)
)
# Afficher le graphique
p_plotly
# Catégories
categories <- c("Biologie", "Droit et Science Politique", "Economie Gestion", "Informatique",
"Langues et Litteratures", "Materiaux, Milieux et Chimie", "Mathematiques",
"Mathematiques et Informatique", "Medecine", "Poubelle", "Psychologie",
"Science de l'ingenieur", "Science de la Terre", "Sciences de l'education", "SHS")
# Organiser les catégories
new_order <- c("Medecine", "Biologie", setdiff(categories, c("Medecine", "Biologie")))
#
df_disc.an2$Discipline_predi <- factor(df_disc.an2$Discipline_predi, levels = new_order)
df_disc.an2$Discipline_predi[df_disc.an2$Discipline_predi == "Poubelle"] <- NA
df_disc.an2 <- df_disc.an2 %>%
drop_na(Discipline_predi)
# Créer le graphique basic
p2 <- ggplot(df_disc.an2, aes(x = Year, y = Disc_predi.an, fill = Discipline_predi)) +
geom_area(position = "stack", linewidth = 0.8, na.rm = TRUE) +
labs(x = "Date", y = "Number of Theses", fill = "Discipline",
title = "Evolution du nombre de thèses par disciplines",
subtitle = "Période 1985-2018") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Création d'un graphique avec rangesliders
p_plotly2 <- ggplotly(p2, dynamicTicks = TRUE) %>% # Transformer le graphique en graphique plotly
layout(
title = "Distribution des thèses par disciplines entre 1985 et 2018\n",
xaxis = list(
rangeslider = list(
type = "date",
bgcolor = "lightblue", # Couleur de fond
bordercolor = "blue", # Couleur de bordure
borderwidth = 2, # Épaisseur de la bordure
thickness = 0.1, # Épaisseur du slider
yaxis = list(title = "", fixedrange = TRUE)
)
)
)
# Afficher le graphique
p_plotly2
## Création d'un graphique plotly avec rangeselector
p_plotly <- ggplotly(p, dynamicTicks = TRUE) %>%
layout(
title = "Distribution des langues de rédaction\n",
xaxis = list(
rangeselector = list(
buttons = list(
list(count = 5, label = "5 ans", step = "year", stepmode = "backward"),
list(count = 10, label = "10 ans", step = "year", stepmode = "backward"),
list(count = 15, label = "15 ans", step = "year", stepmode = "backward"),
list(step = "all")
),
x = 0.3, # Coordonnée x pour le rangeselector
y = -0.3 # Coordonnée y pour le rangeselector
)
)
)
# Afficher le graphique
p_plotly
df_disc.an2$Date <- as.Date(as.character(df_disc.an2$Year), format="%Y")
p <- ggplot(df_disc.an2, aes(x = Date, y = Disc_predi.an, fill = disc_inv)) +
geom_bar(stat = "identity", position = "stack") +
labs(x = "Années", y = "Disciplines") +
ggtitle("Distribution des thèses par disciplines entre 1985 et 2018") +
labs(fill="Disciplines") +
theme_minimal() +
theme(legend.position = "top") +
scale_fill_viridis(discrete = TRUE) # Appliquer la palette viridis à des données discrètes/catégorielles
# Transformation en plotly
p_plotly <- ggplotly(p, dynamicTicks = TRUE)
# Définir les étapes pour le slider
years <- sort(unique(df_disc.an2$Year))
steps <- list()
for(i in seq_along(years)) {
step <- list(
args = list("visible", sapply(years, function(y) y <= years[i])),
label = as.character(years[i]),
method = "restyle"
)
steps[[i]] = step
}
# Ajout du slider
p_plotly2 <- p_plotly %>%
layout(
sliders = list(
list(
active = length(years) - 1,
yanchor = "top",
xanchor = "left",
currentvalue = list(prefix = "Year: "),
steps = steps
)
)
)
p_plotly2